﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ComunesMGI.DataTypes;
using System.IO;
using ComunesMGI.Enums;
using ComunesMGI.Condiciones;

namespace MGI.Logica
{
    public interface IIncidentes
    {
        void EliminarTarea(int idSistema, int tarea);

        void EliminarIncidente(int idSistema, int incidente);

        List<DataCampo> GetCampos(int idSistema, Lista lista);

        DataAltaIncidente AddIncidente(DataSistema incidente);

        List<DataIncidente> GetIncidentes(int idSistema, List<Condicion> condiciones);

        List<DataIncidente> GetIncidentesAsignablesWP(int wkpCod);

        List<DataTarea> GetTareas(int idSistema, int idIncidente);

        DataTareaConCampos GetTarea(int idSistema, int idTarea);

        bool AsignarResponsable(int idSistema, int idIncidente, DataTarea tarea, DataUsuario usuario);

        int AddWorkPackage(int idSistema, DataWP workPackage);

        List<DataWP> GetWorkPackages(int sisCod);

        void AsociarIncidentesWP(int idSistema, int idWorkPackage, List<int> incidentes);

        List<DataIncidenteReporte> GetIncidentesCerradosPeriodo(List<int> sistemas, DateTime perFchIni, DateTime perFchFin);

        List<DataIncidenteReporte> GetIncidentesCreadosPeriodo(List<int> sistemas, DateTime perFchIni, DateTime perFchFin);

        List<DataIncidente> GetIncidentesWP(int idSistema, int idWorkPackage);

        string UploadFile(Stream sourceStream);

        bool AdjuntarArchivoIncidente(string nombreArchivo, int idSistema, int idIncidente, string nroTemp);

        DataAltaTarea AddTarea(int idSistema, int idIncidente, List<DataCampo> campos);

        List<DataEstadoWP> GetEstadosWP();

        List<DataIncidenteReporte> VisualizarIncidentesAsignados(List<int> sistema, string usuario, string campoFiltro, DateTime perFchIni, DateTime perFchFin); 

        bool ChkWpIncidentesOTareasSinCerrar( int wkpCod);

        void ModificarWP( DataWP wp, bool cerrarTodo);

        DataIncidenteConCampos GetIncidente(int idIncidente, int idSistema);

        void ModificarIncidente(int idSistema, DataIncidenteConCampos incidente);

        void ModificarTarea(int idSistema, DataTareaConCampos tarea);

        void DesasociarIncidentesWP(int idWP, List<int> incidentes);

        List<DataWPReporte> GetWorkPackagesDadosAltaPeriodo(List<int> sistemas, DateTime perFchIni, DateTime perFchFin);

        List<string> GetEstadosIncidentes(int idSistema);

        void EliminarWorkPackage(int idWP);
    }
}
